// 任务
#include <iostream>
#include <vector>
#include <ctime>
typedef void (*fun_task)(); // 指向不同任务的函数指针

// 任务的描述

//上传
void UpLoad()
{
    std::cout << "这是一个上传的任务 !" <<std::endl;
}

//下载
void DownLoad()
{
    std::cout << "这是一个下载的任务 !" <<std::endl;
}

//转发
void Forward()
{
    std::cout << "这是一个转发的任务 !" <<std::endl;
}

// 任务的管理
class TaskMananger
{
public:
    TaskMananger()
    {
        // 种一颗随机数种子
        srand(time(nullptr));

    }

    ~TaskMananger()
    {
    }

    //生成任务码
    int Code()
    {
        // 生成一个随机码 , 都是 _tasks 这个vector 下标
        return rand() % _tasks.size();
    }

    // 注册任务 , 即 : 往任务列表中插入任务
    void Register(fun_task task)
    {
        _tasks.emplace_back(task);
    }

    //执行任务
    void Execute(int taskcode)
    {
        if(taskcode >=0 && taskcode < _tasks.size())
        {
            _tasks[taskcode](); // 回调函数
        }
    }

private:
    // 任务很多要不要被管理呢 ??
    std::vector<fun_task> _tasks; // 里面的类型是一个一个的任务
};